﻿using System;
using System.Collections.Generic;
using ProyectoBastanteo.Dominio;
using ProyectoBastanteo.Persistencia;


namespace ProyectoBastanteo.Negocio
{
    public class BastanteoServiceImpl : IBastanteoService
    {
        #region Dependencias
        //IBastanDAO BastanteoDAO= null;
        ClienteDAO CliDAO = null;
        PoderesDAO PodDAO = null;
        BastanteoDAO BasDAO = null;
        IntervencionDAO IntDAO = null;
        #endregion

        #region Operaciones de negocio
        public Bastanteo RegistrarBastanteo(int codigo, string grupoB, string poder, string tipoInt,
            double importe, DateTime fecvenc)
        {
            //Excepción si falta algún dato requerido
            if (codigo <= 0 || grupoB == null || poder == null ||
                tipoInt == null || importe <= 0 || fecvenc == null)
                throw new DatosInsufException("Faltan datos para crear cliente");

            // Excepcion si ya se registro bastanteo con el mismo poder con el mismo cliente con el mismo grupo
            if (BasDAO.ObtenerPorDup(codigo, grupoB, poder, tipoInt) != null)
              throw new EntidadRepetidaException("El Bastanteo ya existe  con el Poder Cliente y Grupo y tipo de intervencion Ingresados");
            
            
            // Creacion del bastanteo
            Bastanteo bastanteoACrear = new Bastanteo();
            bastanteoACrear.codclie = CliDAO.Obtener(codigo);
            bastanteoACrear.grubast = grupoB;
            bastanteoACrear.codpode = PodDAO.Obtener(poder);
            bastanteoACrear.tipoint = tipoInt;
            bastanteoACrear.importe = importe;
            bastanteoACrear.fecvenc = fecvenc;
            return BasDAO.Crear(bastanteoACrear);

        }

        #endregion
        #region Metodos se soporte para Anexos
        public Intervencion RegistrarInterv(int codclie, string grubast, string codpode, string grupoIn)
        {
            //excepcion para verificar que dicha combinacion no existe
            if (IntDAO.ObtenerBastInt(codclie, grubast, codpode, grupoIn) != null)
                throw new EntidadRepetidaException("La combinacio ingresada ya existe");
            Intervencion interACrear = new Intervencion();
            interACrear.codclie = CliDAO.Obtener(codclie);
            interACrear.grubast = grubast;
            interACrear.codpode = PodDAO.Obtener(codpode);
            interACrear.gruinte = grupoIn;
            return IntDAO.Crear(interACrear);
        }
        //Bastanteo BastanteoAEliminar = basDAO.Obtener(ocliente, "A", opoderes);
            //Assert.DoesNotThrow(delegate
            //{
            //    basDAO.Eliminar(BastanteoAEliminar);
            //});
            //Bastanteo BastanteoEliminado = basDAO.Obtener(ocliente, "A", opoderes);
            //Assert.IsNull(BastanteoEliminado);
        //public void EliminarPoder(string cpoder)
        //{
            
        //    Poderes poderAEliminar = PodDAO.Obtener(cpoder);
        //    PodDAO.Eliminar(poderAEliminar);
            
        //}
        
       
        #endregion


        #region Metodos  de soporte para entidad Bastanteo
        public Bastanteo ObtenerBastanteo(Cliente codclie, string grubast, Poderes codpod)
        {
            return BasDAO.Obtener(codclie, grubast, codpod);
        }

        public Bastanteo ModificarBastanteo( Bastanteo  BastanteoAModificar)
        {
            return BasDAO.Modificar(BastanteoAModificar);
        }

        public void EliminarBastanteo(Bastanteo BastanteoAEliminar)
        {
            BasDAO.Eliminar(BastanteoAEliminar);
        }

        public Poderes ObtenerPoderes(String codigo)
        {

            return PodDAO.Obtener(codigo);
        }

        public VerificacionPoderes ObtenerPoderesporRuc(String pRuc)
        {
            return PodDAO.ObtenerPoderesporRuc(pRuc);
        }


        public ICollection<Bastanteo> ListarBastanteo()
        {
            return BasDAO.ListarTodos();
        }

        public ICollection<Poderes> ListarPoderes()
        {
            return PodDAO.ListarTodos();
        }

        #endregion
    }
}